package com.shenwei.yingdaoguanli.controller;

import com.shenwei.yingdaoguanli.entity.FileStat;
import com.shenwei.yingdaoguanli.entity.dto.FileStatDto;
import com.shenwei.yingdaoguanli.entity.vo.FileStatVo;
import com.shenwei.yingdaoguanli.service.FileStatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

/**
 * @Author wang
 * @Date 2025/1/8 22:46
 * @PackageName:com.shenwei.yingdaoguanli.controller
 * @ClassName: FileStatController
 * @Description: TODO
 * @Version 1.0
 */
@RestController
@RequestMapping("/filestat")
public class FileStatController {

    @Autowired
    private FileStatService fileStatService;
    @Value("${file.statPath}")
    private String filePath;

    // 查询当天数据
    @GetMapping("/getTodayFileStats")
    public List<FileStatVo> getTodayFileStats(FileStatDto fileStatDto) {
        if (fileStatDto.getStatDate() == null){
            fileStatDto.setStatDate(LocalDate.now().toString());
        }
        // 查询当天数据
        return fileStatService.getTodayFileStats(fileStatDto);
    }


    // 查询指定路径下各个末级的最近10个文件统计信息
    @GetMapping("/getLatestFileStatsByDirectory")
    public List<FileStatVo> getLatestFileStatsByDirectory(FileStatDto fileStatDto) {
        if (fileStatDto.getStatDate() == null){
            fileStatDto.setStatDate(LocalDate.now().toString());
        }
        // 查询指定路径下各个末级的最近10个文件统计信息
        return fileStatService.getLatestFileStatsByStatDate(fileStatDto);
        }

    // 根据末级路径,统计时间 进行明细查询
    @GetMapping("/getFileStatsByDirectoryAndStatDate")
    public List<FileStat> getFileStatsByDirectoryAndStatDate(FileStatDto fileStatDto) {
        // 根据末级路径,统计时间 进行明细查询
        return fileStatService.getFileStatsByDirectoryAndStatDate(fileStatDto);
    }

//    @PostMapping("/startStat")
//    public String startStat(@RequestParam("directoryPath") String directoryPath) {
//        // 开始统计逻辑
//        fileStatService.startStat(directoryPath);
//        return "Statistics completed successfully!";
//    }

    /**

     * x-www-form-urlencoded

     * directoryPath
     * 键
     * D:\BI本地数据
     * 值
     *
     * http://localhost:8080/startStat?directoryPath=D:\\BI本地数据
     */


    @PostMapping("/startStat")
    public String startStat(@RequestBody FileStatDto fileStatDto) {
        String fileLoad = fileStatDto.getFilePath();
        // 如果为空，则使用默认路径
        if ("null".equals(fileLoad) || fileLoad == null || fileLoad.isEmpty()){
            fileLoad = filePath;
        }
        // 删除当天统计数据
        String today = LocalDate.now().toString();
        boolean isDeleted = fileStatService.deleteTodayStats(today);
        if (!isDeleted) {
            return "删除当天统计数据失败!";
        }
        // 开始统计逻辑
       int result = fileStatService.startStat(fileLoad);

       if (result > 0){
           return "统计成功!";
       }
       return "统计失败!";
    }
    /**
     * 2025-01-09 14:12:11.071  WARN 21880 --- [nio-8080-exec-1]
     * .w.s.m.s.DefaultHandlerExceptionResolver :
     * Resolved [org.springframework.http.converter.HttpMessageNotReadableException:
     * JSON parse error: Unrecognized character escape 'B' (code 66); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unrecognized character escape 'B' (code 66)<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 2, column: 28] (through reference chain: com.shenwei.yingdaoguanli.entity.FileLoad["filePathTongJi"])]
     *
     *
     * 在 JSON 中，反斜杠必须用 \\ 进行转义。例如：
     *
     * 原来的路径：
     *

     * {
     *     "filePathTongJi": "D:\BI本地数据"
     * }
     * 修正后的路径：
     *

     * {
     *     "filePathTongJi": "D:\\BI本地数据"
     * }
     * 这样 Jackson 会将 \\ 识别为一个实际的反斜杠。
     */
}